package com.atguigu.gmallauth.config;

import com.atguigu.gmall.common.utils.RsaUtils;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.context.properties.ConfigurationProperties;


import javax.annotation.PostConstruct;
import java.io.File;
import java.security.PrivateKey;
import java.security.PublicKey;

/**  @ ConfigurationProperties使用此注解需要在使用这个配置类的地方指定注解@EnableConfigurationProperties({JwtProperties.class})
 * @author Jia Fa
 * @create 2021-12-17 12:39
 */
@Data
@Slf4j
@ConfigurationProperties(prefix = "auth.jwt")
public class JwtProperties {

    private String pubKeyPath;  // 公钥
    private String priKeyPath; // 私钥
    private String secret; // 盐
    private String cookieName; // cookie名字
    private Integer expire; // 过期时间
    private String unick; // 用户昵称存储的cookie

    // 由于每次读取都需要IO操作  所以在项目启动阶段就把公钥私钥读取出来
    private PublicKey publicKey;
    private PrivateKey privateKey;

    @PostConstruct
    public void init(){
        try {
            // 将公私钥文件读取
            File pubFile = new File(pubKeyPath);
            File priFile = new File(priKeyPath);

            if (!pubFile.exists()||!priFile.exists()){
                // 二者有一不存在均需要重新生成
                RsaUtils.generateKey(priKeyPath, priKeyPath, secret);
            }
            // 此时公私钥一定存在  进行赋值
            this.publicKey = RsaUtils.getPublicKey(pubKeyPath);
            this.privateKey = RsaUtils.getPrivateKey(priKeyPath);
        } catch (Exception e) {
            log.error("生成公私钥出错");
            e.printStackTrace();
        }

    }
}
